package com.bf.electroplating.util.word;

import com.bf.electroplating.pojo.entity.ComCompany;
import lombok.Data;

/**
 * Word整改数据实体类
 * 用于映射Word文档中的整改数据
 */
@Data
public class WordRectificationData {
    
    /**
     * 序号
     */
    private String serialNumber;
    
    /**
     * 车间
     */
    private String workshop;
    
    /**
     * 具体点位
     */
    private String specificLocation;
    
    /**
     * 问题描述
     */
    private String problemDescription;
    
    /**
     * 整改前照片路径
     */
    private String beforeImagePath;
    
    /**
     * 意见建议
     */
    private String suggestions;
    
    /**
     * 改造后照片路径
     */
    private String afterImagePath;
    
    /**
     * 整改内容
     */
    private String rectificationContent;
    
    /**
     * 是否完成闭环整改
     */
    private String isCompleted;
    
    /**
     * 公司名称
     */
    private String companyName;
    
    /**
     * 匹配到的企业对象
     */
    private ComCompany matchedCompany;
    
    /**
     * 原始行数据
     */
    private java.util.Map<String, String> originalData;
    
    /**
     * 构造函数
     */
    public WordRectificationData() {
        this.originalData = new java.util.HashMap<>();
    }
    
    /**
     * 从Map数据创建对象（使用企业对象和原始公司名称）
     */
    public static WordRectificationData fromMap(java.util.Map<String, String> data, ComCompany company, String originalCompanyName) {
        WordRectificationData rectificationData = new WordRectificationData();
        rectificationData.setOriginalData(data);
        rectificationData.setMatchedCompany(company);
        rectificationData.setCompanyName(originalCompanyName != null ? originalCompanyName : 
            (company != null ? company.getCompanyName() : ""));
        
        // 映射字段（支持不同的列名）
        rectificationData.setSerialNumber(getValue(data, "序号", "编号", "id"));
        rectificationData.setWorkshop(getValue(data, "车间", "工作车间", "车间名称"));
        rectificationData.setSpecificLocation(getValue(data, "具体点位", "点位", "位置", "检查点位"));
        rectificationData.setProblemDescription(getValue(data, "问题描述", "问题", "发现问题", "问题内容"));
        rectificationData.setSuggestions(getValue(data, "意见建议", "建议", "意见", "改进建议"));
        rectificationData.setRectificationContent(getValue(data, "整改内容", "整改措施", "整改方案", "处理措施"));
        rectificationData.setIsCompleted(getValue(data, "是否完成闭环整改", "是否完成", "完成状态", "整改状态"));
        
        // 处理图片字段（标记为图片的列）
        rectificationData.setBeforeImagePath(getImageValue(data, "整改前照片", "整改前图片", "问题照片", "现场照片"));
        rectificationData.setAfterImagePath(getImageValue(data, "改造后照片", "改造后图片", "整改后照片", "完成照片"));
        
        return rectificationData;
    }
    
    /**
     * 获取值（支持多个可能的键名）
     */
    private static String getValue(java.util.Map<String, String> data, String... keys) {
        for (String key : keys) {
            String value = data.get(key);
            if (value != null && !value.trim().isEmpty()) {
                return value.trim();
            }
        }
        return "";
    }
    
    /**
     * 获取图片值（专门处理图片列）
     */
    private static String getImageValue(java.util.Map<String, String> data, String... keys) {
        for (String key : keys) {
            String value = data.get(key);
            if (value != null && !value.trim().isEmpty() && !"[图片]".equals(value)) {
                // 如果不是"[图片]"占位符，则返回实际路径
                return value.trim();
            }
        }
        return "";
    }
    
    /**
     * 验证数据完整性
     */
    public boolean isValid() {
        // 基本字段验证
        if (workshop == null || workshop.trim().isEmpty()) {
            return false;
        }
        
        if (specificLocation == null || specificLocation.trim().isEmpty()) {
            return false;
        }
        
        if (problemDescription == null || problemDescription.trim().isEmpty()) {
            return false;
        }
        
        if (companyName == null || companyName.trim().isEmpty()) {
            return false;
        }
        
        return true;
    }
    
    /**
     * 获取验证错误信息
     */
    public String getValidationError() {
        if (workshop == null || workshop.trim().isEmpty()) {
            return "车间信息不能为空";
        }
        
        if (specificLocation == null || specificLocation.trim().isEmpty()) {
            return "具体点位不能为空";
        }
        
        if (problemDescription == null || problemDescription.trim().isEmpty()) {
            return "问题描述不能为空";
        }
        
        if (companyName == null || companyName.trim().isEmpty()) {
            return "公司名称不能为空";
        }
        
        return null;
    }
    
    /**
     * 获取问题位置（车间-点位）
     */
    public String getProblemLocation() {
        StringBuilder location = new StringBuilder();
        
        if (workshop != null && !workshop.trim().isEmpty()) {
            location.append(workshop.trim());
        }
        
        if (specificLocation != null && !specificLocation.trim().isEmpty()) {
            if (location.length() > 0) {
                location.append("-");
            }
            location.append(specificLocation.trim());
        }
        
        return location.toString();
    }
    
    /**
     * 是否有整改前照片
     */
    public boolean hasBeforeImage() {
        return beforeImagePath != null && !beforeImagePath.trim().isEmpty();
    }
    
    /**
     * 是否有改造后照片
     */
    public boolean hasAfterImage() {
        return afterImagePath != null && !afterImagePath.trim().isEmpty();
    }
    
    /**
     * 是否已完成整改
     */
    public boolean isCompleted() {
        if (isCompleted == null || isCompleted.trim().isEmpty()) {
            return true; // 默认为已完成
        }
        
        String status = isCompleted.trim().toLowerCase();
        return "是".equals(status) || 
               "完成".equals(status) || 
               "已完成".equals(status) || 
               "yes".equals(status) || 
               "true".equals(status) || 
               "1".equals(status);
    }
    
    /**
     * 获取整改状态
     */
    public String getRectificationStatus() {
        return isCompleted() ? "1" : "0"; // 1-已完成，0-未完成
    }
    
    /**
     * 转换为字符串表示
     */
    @Override
    public String toString() {
        return String.format("WordRectificationData{序号='%s', 车间='%s', 点位='%s', 公司='%s', 整改前图片=%s, 改造后图片=%s}", 
            serialNumber, workshop, specificLocation, companyName, 
            hasBeforeImage() ? "有" : "无", 
            hasAfterImage() ? "有" : "无");
    }
    
    /**
     * 获取调试信息
     */
    public String getDebugInfo() {
        StringBuilder sb = new StringBuilder();
        sb.append("=== Word整改数据调试信息 ===\n");
        sb.append("序号: ").append(serialNumber).append("\n");
        sb.append("车间: ").append(workshop).append("\n");
        sb.append("具体点位: ").append(specificLocation).append("\n");
        sb.append("问题描述: ").append(problemDescription).append("\n");
        sb.append("意见建议: ").append(suggestions).append("\n");
        sb.append("整改内容: ").append(rectificationContent).append("\n");
        sb.append("是否完成: ").append(isCompleted).append("\n");
        sb.append("公司名称: ").append(companyName).append("\n");
        sb.append("企业ID: ").append(matchedCompany != null ? matchedCompany.getId() : "未匹配").append("\n");
        sb.append("整改前照片: ").append(beforeImagePath).append("\n");
        sb.append("改造后照片: ").append(afterImagePath).append("\n");
        sb.append("数据有效性: ").append(isValid() ? "有效" : "无效").append("\n");
        
        if (!isValid()) {
            sb.append("验证错误: ").append(getValidationError()).append("\n");
        }
        
        sb.append("原始数据: ").append(originalData).append("\n");
        sb.append("========================");
        
        return sb.toString();
    }
}
